package modelo.persistencia.JDBC;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import modelo.entidades.Alerta;
import modelo.entidades.AlertaImp;
import modelo.persistencia.AlertaDAO;

/**
 *
 * @author jjcamacho
 */
public class AlertaDAOJDBC implements AlertaDAO {

    @Override
    public Alerta read(String pk) throws SQLException, Exception {
        throw new UnsupportedOperationException("No implementado");        
    }

    @Override
    public Alerta read(Alerta entidad) throws SQLException, Exception {
        Alerta alerta = null;
        String sql = "select * from alertas where  matricula=? and fecha=? and tipo=?";
        try {
            PreparedStatement stmt = Persistencia.createConnection().prepareStatement(sql);
            stmt.setString(1, entidad.getMatricula());
            stmt.setTimestamp(2,(Timestamp) entidad.getFecha());
            stmt.setString(3, entidad.getTipo());
            ResultSet res = stmt.executeQuery();
            if (res.next()) {
                String matricula = res.getString("matricula");
                Timestamp fecha = res.getTimestamp("fecha");
                String tipo = res.getString("tipo");
                Boolean atendida = res.getBoolean("atendida");
                String observacion=res.getString("observacion");
                alerta = new AlertaImp(matricula,fecha,tipo);
                alerta.setAtendida(atendida);
                alerta.setObservacion(observacion);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return alerta;
    }

    @Override
    public void create(Alerta alerta) throws SQLException, Exception {
        String sql = "insert into alertas(matricula, fecha, tipo, atendida, observacion) values (?,?,?,?,?)";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, alerta.getMatricula());
            stm.setTimestamp(2, (Timestamp) alerta.getFecha());
            stm.setString(3, alerta.getTipo());
            stm.setBoolean(4, alerta.getAtendida());
            stm.setString(5, alerta.getObservacion());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void update(Alerta alerta) throws SQLException, Exception {
        String sql = "update alertas set matricula=?, fecha=?, tipo=?, atendida=?, observacion=? where (matricula=? and fecha=? and tipo=?)";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, alerta.getMatricula());
            stm.setTimestamp(2, (Timestamp) alerta.getFecha());
            stm.setString(3, alerta.getTipo());
            stm.setBoolean(4, alerta.getAtendida());
            stm.setString(5, alerta.getObservacion());
            stm.setString(6,alerta.getMatricula());
            stm.setTimestamp(7, (Timestamp) alerta.getFecha());
            stm.setString(8, alerta.getTipo());
            stm.executeUpdate();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void delete(Alerta alerta) throws SQLException, Exception {
        String sql = "delete from alertas where matricula = ? and fecha= ?";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, alerta.getMatricula());
            stm.setTimestamp(2,(Timestamp) alerta.getFecha());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public List<Alerta> list() throws SQLException, Exception {
        List<Alerta> alertas = new ArrayList<Alerta>();

        try {
            Statement stmt = Persistencia.createConnection().createStatement();
            ResultSet res = stmt.executeQuery("select * from alertas where atendida=false");
            while (res.next()) {
                String matricula = res.getString("matricula");
                Timestamp fecha = res.getTimestamp("fecha");
                String tipo = res.getString("tipo");
                Boolean atendida = res.getBoolean("atendida");
                String observacion=res.getString("observacion");
                Alerta alerta = new AlertaImp(matricula,fecha,tipo);
                alerta.setAtendida(atendida);
                alerta.setObservacion(observacion);
                alertas.add(alerta);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return alertas;
    }

}
